#include "stm32f10x.h"                  // Device header
#include "Delay.h"

#include "LED.h"
#include "Key.h"
#include "OLED.h"
#include "MyFlash.h"
#include "Store.h"

uint8_t KeyNum = 0;


void Test_Flash()
{
	// 初始化
	OLED_Init();
	Key_Init();
	
	// 读取起始地址分别读取一个字的内容 (4字节 32位), 半字, 一个字节的内容. 
	OLED_ShowHexNum(1, 1, MyFLASH_ReadWord(0x08000000), 8);         // 0x20000660
	OLED_ShowHexNum(2, 1, MyFLASH_ReadHalfWord(0x08000000), 4);     // 0x0660
	OLED_ShowHexNum(3, 1, MyFLASH_ReadByte(0x08000000), 2);         // 0x60
	
	// 最后一页擦除并写入字和半字进行测试（擦除只能以页的方式进行擦除）
	MyFLASH_ErasePage(STORE_START_ADDRESS);
	MyFLASH_ProgramWord(STORE_START_ADDRESS, 0x12345678);
	MyFLASH_ProgramHalfWord(0x0800FC10, 0xABCD);
	
	while(1)
	{
		// 按键检测
		KeyNum = Key_GetNum();
		
		// KEY1 按下
		if(KeyNum == 1)
		{
			MyFLASH_EraseAllPages();
		}
		else if(KeyNum == 2)
		{
			// 擦除闪存的第一页
			MyFLASH_ErasePage(0x08000000);
		}
	}
}

void Test_Store()
{
	// 初始化
	OLED_Init();
	Key_Init();
	
	// 上电加载数据到 Flash
	Store_Init();
	
	OLED_ShowString(1, 1, "Flag:");
	OLED_ShowString(2, 1, "Data:");
	
	while(1)
	{
		KeyNum = Key_GetNum();
		
		if(1 == KeyNum)
		{
			Store_Data[1] += 1;
			Store_Data[2] += 2;
			Store_Data[3] += 3;
			Store_Data[4] += 4;
			Store_Save();
		}
		
		else if(2 == KeyNum)
		{
			Store_Clear();
		}
		
		// 显示所有数据
		OLED_ShowHexNum(1, 6, Store_Data[0], 4);
		OLED_ShowHexNum(3, 1, Store_Data[1], 4);
		OLED_ShowHexNum(3, 6, Store_Data[2], 4);
		OLED_ShowHexNum(4, 1, Store_Data[3], 4);
		OLED_ShowHexNum(4, 6, Store_Data[4], 4);
	}
}

int main(void)
{
	Test_Store();
	return 0;
} 